home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 2
/
AACD 2.iso
/
AACD
/
Magazine
/
ActiveShareware
/
BPrefs
/
Source
/
bPrefs.e
< prev
next >
Wrap
Text File
|
1999-09-16
|
42KB
|
990 lines
OPT PREPROCESS
MODULE 'amigalib/boopsi',
'dos/dos','dos/dosextens',
'exec/execbase','exec/lists','exec/nodes','exec/tasks',
'intuition/classes','intuition/classusr','intuition/intuition','intuition/screens',
'libraries/asl','libraries/gadtools','libraries/mui','libraries/muip',
'mui/muicustomclass','muimaster',/*'mui/Busy_mcc',*/
'utility','utility/tagitem','utility/hooks',
'*bprefslocale'
ENUM ID_VIEW=1,ID_USE,ID_TEST,ID_SAVE,ID_VIEWACT,ID_SETCOL,
ID_ABOUT,ID_MABOUT,ID_PREFS,ID_VALRES,ID_VALLST,ID_VALINI,ID_HIDE,ID_ADDP,ID_DELP,
ID_REFRS,ID_REFRL,
ID_DOUBLE
#define PROGVER '$VER: Birdie Prefs 1.31 (16/09/99)'
DEF app,window,sigs=0,running,result,
active_cc,patternlist:PTR TO LONG,patternlen,
menu,gmenu,gmenuobj,
vmenu,vmenuobj,
tested, /*TRUE if the test button has been pressed at least once*/
adr_lra,adr_lga,adr_lba, /*Light Balance*/
adr_dra,adr_dga,adr_dba, /*Dark Balance*/
adr_view,adr_current,adr_l,adr_lv,adr_addp,adr_delp, /*Patternlist*/
adr_active,adr_activen,adr_activec,adr_colour,adr_activelvl,adr_activepasl,adr_viewact, /*Active Window*/
adr_nobmp,adr_noborder,adr_flood,adr_nolight,adr_precision,adr_exclude,adr_doexcl,adr_pubscreens, /*Options*/
adr_save,adr_use,adr_test,adr_cancel,
adr_stat,/*adr_busy,*/
red,green,blue,
-> penspec:PTR TO mui_penspec,
cmd[900]:STRING,s:PTR TO CHAR,n,tmp[100]:STRING,
tstdout,thandler /*I've limited the command line to about 600 chars, I think
it will be enough*/
CONST FL_NONE=0
SET FL_EXIT,FL_SAVE
DEF task
DEF startStat,pos,
btmp[900]:STRING,space,activep=FALSE,s2[60]:STRING
DEF cat:PTR TO catalog_bprefs
DEF cl_pslider:PTR TO mui_customclass
/***********************************
cmenu custom private class:subclass of any class, but handles a contextmenu
***************************************/
#define mCheckMark(selected) NewObjectA(cl_mimage.mcc_class,NIL,[ImageButtonFrame,\
MUIA_InputMode, MUIV_InputMode_Toggle,\
MUIA_Image_Spec, MUII_CheckMark,\
MUIA_Image_FreeVert,MUI_TRUE,\
MUIA_Selected, selected,\
MUIA_Background, MUII_ButtonBack,\
MUIA_ShowSelState, FALSE,\
MUIA_ContextMenu,gmenuobj,\
MUIA_Cmenu_Default,selected,\
MUIA_Cmenu_Attribute,MUIA_Selected,\
End
#define mSliderObject(lvl) NewObjectA(cl_mslider.mcc_class,NIL,[MUIA_ContextMenu,gmenuobj,\
MUIA_Cmenu_Attribute,MUIA_Slider_Level,\
MUIA_Cmenu_Default,lvl,\
MUIA_Slider_Level,lvl
#define mStringObject NewObjectA(cl_mstring.mcc_class,NIL,[MUIA_ContextMenu,gmenuobj,\
MUIA_Cmenu_Default,'',\
MUIA_Cmenu_Attribute,MUIA_String_Contents
#define mVGroup NewObjectA(cl_mgroup.mcc_class,NIL,[MUIA_ContextMenu,vmenuobj
#define mHGroup NewObjectA(cl_mgroup.mcc_class,NIL,[MUIA_Group_Horiz,MUI_TRUE,MUIA_ContextMenu,gmenuobj
DEF cl_mslider:PTR TO mui_customclass
DEF cl_mimage: PTR TO mui_customclass
DEF cl_mstring:PTR TO mui_customclass
DEF cl_mgroup: PTR TO mui_customclass -> mgroup is not exactely like image or slider, it sends the method to all his children
ENUM MUIA_Cmenu_Attribute=$FCB90000,
MUIA_Cmenu_Default,
MUIA_Cmenu_Initial
OBJECT mgroup_data
empty:INT
ENDOBJECT
/*dispatcher for the mGroup class, that sends the contextmenuchoice method to all its children*/
PROC mgroup_dispatcher(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO msg)
DEF state,member
IF msg.methodid = MUIM_ContextMenuChoice
get(obj,MUIA_Group_ChildList,{state})
NextObject({state})
WHILE (member:=NextObject({state}))
doMethodA(member,msg)
ENDWHILE
RETURN NIL
ENDIF
ENDPROC doSuperMethodA(cl,obj,msg)
OBJECT cmenu_data
attr -> the name of the attribute to change, e.g. MUIA_Slider_Level
default,initial
ENDOBJECT
PROC cmenu_dispatcher(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO msg)
DEF methodid
methodid:=msg.methodid
SELECT methodid
CASE OM_NEW ; RETURN cmenu_new(cl,obj,msg)
CASE OM_SET ; RETURN cmenu_set(cl,obj,msg)
CASE MUIM_ContextMenuChoice ; RETURN cmenu_contextmenuchoice(cl,obj,msg)
ENDSELECT
ENDPROC doSuperMethodA(cl,obj,msg)
PROC cmenu_new(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO opset)
DEF data:PTR TO cmenu_data,
tags:PTR TO tagitem,
tag:PTR TO tagitem,
attrid,c=TRUE
IF (obj:=doSuperMethodA(cl,obj,msg))=NIL THEN RETURN NIL
data:=INST_DATA(cl,obj)/*like the "set" method, I should create a single procedure to it..*/
tags:=msg.attrlist
WHILE tag:=NextTagItem({tags})
IF tag.data
attrid:=tag.tag
SELECT attrid
CASE MUIA_Cmenu_Attribute
data.attr:=tag.data
CASE MUIA_Cmenu_Default
data.default:=tag.data
CASE MUIA_Cmenu_Initial
data.initial:=tag.data ; c:=FALSE
ENDSELECT
ENDIF
ENDWHILE
IF c THEN data.initial:=data.default
ENDPROC obj
PROC cmenu_set(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO opset)
DEF data:PTR TO cmenu_data,
tags:PTR TO tagitem,
tag:PTR TO tagitem,
attrid
data:=INST_DATA(cl,obj)
tags:=msg.attrlist
WHILE tag:=NextTagItem({tags})
IF tag.data
attrid:=tag.tag
SELECT attrid
CASE MUIA_Cmenu_Attribute
data.attr:=tag.data
CASE MUIA_Cmenu_Default
data.default:=tag.data
CASE MUIA_Cmenu_Initial
data.initial:=tag.data
ENDSELECT
ENDIF
ENDWHILE
ENDPROC doSuperMethodA(cl,obj,msg)
PROC cmenu_contextmenuchoice(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO LONG)
DEF menuitem,str:PTR TO CHAR,data:PTR TO cmenu_data
data:=INST_DATA(cl,obj)
menuitem:=msg[1] -> That looks quite ugly, but what should I put as msg type?
get(menuitem,MUIA_Menuitem_Title,{str})
IF StrCmp(str,cat.msgmReset.getstr())
set(obj,data.attr,data.default)
ELSEIF StrCmp(str,cat.msgmInitial.getstr())
set(obj,data.attr,data.initial)
ENDIF
ENDPROC
/*************
pSlider cc: just a subclass of Slider class, replacing the value by "exact"
when it is -1. It also has a context menu
*************/
#define pSliderObject NewObjectA(cl_pslider.mcc_class,NIL,[TAG_IGNORE,0
OBJECT pslider_data
string:PTR TO CHAR
ENDOBJECT
PROC pslider_dispatcher(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO msg)
DEF methodid
methodid:=msg.methodid
SELECT methodid
CASE OM_NEW ; RETURN pslider_new(cl,obj,msg)
CASE OM_DISPOSE ; RETURN pslider_dispose(cl,obj,msg)
CASE MUIM_Numeric_Stringify ; RETURN pslider_stringify(cl,obj,msg)
ENDSELECT
ENDPROC doSuperMethodA(cl,obj,msg)
PROC pslider_new(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO msg)
DEF data:PTR TO pslider_data
IF (obj:=doSuperMethodA(cl,obj,msg)) = NIL THEN RETURN NIL
data:=INST_DATA(cl,obj)
data.string:=String(10)
ENDPROC obj
PROC pslider_dispose(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO msg)
DEF data:PTR TO pslider_data
data:=INST_DATA(cl,obj)
DisposeLink(data.string)
ENDPROC doSuperMethodA(cl,obj,msg)
PROC pslider_stringify(cl:PTR TO iclass,obj:PTR TO object,msg:PTR TO muip_numeric_stringify)
DEF data:PTR TO pslider_data
data:=INST_DATA(cl,obj)
IF msg.value=-1
StrCopy(data.string,cat.msglExact.getstr())
ELSE
StringF(data.string,'\d',msg.value)
ENDIF
ENDPROC data.string
PROC main() HANDLE
IF (localebase:=OpenLibrary('locale.library',0)) = NIL THEN
Raise('Couldn''t open locale.library') -> Don't put this in catalogs ;-)
NEW cat.create()
cat.open()
IF (utilitybase:=OpenLibrary('utility.library',36))=NIL THEN
Raise(cat.msgfNoUtility.getstr())
NEW patternlist[21]
muimasterbase:=OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN)
IF muimasterbase = NIL THEN
Raise(cat.msgfNoMui.getstr())
IF (cl_mslider:=eMui_CreateCustomClass(NIL,MUIC_Slider,NIL,SIZEOF cmenu_data,{cmenu_dispatcher})) = NIL THEN
Raise(cat.msgfCslider.getstr())
IF (cl_mimage:=eMui_CreateCustomClass(NIL,MUIC_Image,NIL,SIZEOF cmenu_data,{cmenu_dispatcher})) = NIL THEN
Raise(cat.msgfCimage.getstr())
IF (cl_mstring:=eMui_CreateCustomClass(NIL,MUIC_String,NIL,SIZEOF cmenu_data,{cmenu_dispatcher})) = NIL THEN
Raise(cat.msgfCstring.getstr())
IF (cl_mgroup:=eMui_CreateCustomClass(NIL,MUIC_Group,NIL,SIZEOF mgroup_data,{mgroup_dispatcher})) = NIL THEN
Raise(cat.msgfCgroup.getstr())
IF (cl_pslider:=eMui_CreateCustomClass(NIL,MUIC_Slider,NIL,SIZEOF pslider_data,{pslider_dispatcher})) = NIL THEN
Raise(cat.msgfCpslider.getstr())
active_cc:=[cat.msglColour.getstr(),cat.msglPattern.getstr(),NIL]
menu:=[
NM_TITLE,0, cat.msgmProject.getstr(), 0, 0, 0, 0,
NM_ITEM, 0, cat.msgmAbout.getstr(), '?', 0, 0, ID_ABOUT,
NM_ITEM, 0, cat.msgmAboutMui.getstr(),'''',0, 0, ID_MABOUT,
NM_ITEM, 0, cat.msgmSettings.getstr(),'P', 0, 0, ID_PREFS,
NM_ITEM, 0, NM_BARLABEL, 0, 0, 0, 0,
NM_ITEM, 0, cat.msgmSave.getstr(), 'S', 0, 0, ID_SAVE,
NM_ITEM, 0, cat.msgmUse.getstr(), 'U', 0, 0, ID_USE,
NM_ITEM, 0, cat.msgmTest.getstr(), 'T', 0, 0, ID_TEST,
NM_ITEM, 0, cat.msgmHide.getstr(), 'H', 0, 0, ID_HIDE,
NM_ITEM, 0, cat.msgmQuit.getstr(), 'Q', 0, 0, MUIV_Application_ReturnID_Quit,
NM_TITLE,0, cat.msgmPrefs.getstr(),0,0,0,0,
NM_ITEM, 0, cat.msgmReset.getstr(), 'W', 0, 0, ID_VALRES,
NM_ITEM, 0, cat.msgmLast.getstr(), 'O', 0, 0, ID_VALLST,
NM_ITEM, 0, cat.msgmInitial.getstr(), 'I', 0, 0, ID_VALINI,
NM_END,0,NIL,0,0,0,0]:newmenu
gmenu:=[
NM_TITLE, 0, cat.msgmGadget.getstr(), 0,0,0,0,
NM_ITEM, 0, cat.msgmReset.getstr(), 0,0,0,0,
/*NM_ITEM, 0, cat.msgmLast.getstr(), 0,0,0,0,*/ -> The last_saved function is a little more difficult to do...
NM_ITEM, 0, cat.msgmInitial.getstr(),0,0,0,0,
NM_END,0,NIL,0,0,0,0]:newmenu
gmenuobj:=Mui_MakeObjectA(MUIO_MenustripNM,[gmenu,0])
vmenu:=[
NM_TITLE, 0, cat.msgmGroup.getstr(), 0,0,0,0,
NM_ITEM, 0, cat.msgmReset.getstr(), 0,0,0,0,
/*NM_ITEM, 0, cat.msgmLast.getstr(), 0,0,0,0,*/ -> The last_saved function is a little more difficult to do...
NM_ITEM, 0, cat.msgmInitial.getstr(),0,0,0,0,
NM_END,0,NIL,0,0,0,0]:newmenu
vmenuobj:=Mui_MakeObjectA(MUIO_MenustripNM,[vmenu,0])
app:=ApplicationObject,
MUIA_Application_Title, 'Birdie prefs',
MUIA_Application_Version,PROGVER,
MUIA_Application_Author, 'Maxime Gamboni',
MUIA_Application_Description, cat.msgrDescr.getstr(),
MUIA_Application_Base,'BIRDIE_PREFS',
MUIA_Application_Menustrip, Mui_MakeObjectA(MUIO_MenustripNM,[menu,0]),
MUIA_Application_SingleTask,MUI_TRUE,
MUIA_Application_Sleep,MUI_TRUE,
SubWindow, window:=WindowObject,
MUIA_Window_Title, 'Birdie prefs',
MUIA_Window_ScreenTitle, cat.msgrTitle.getstr(),
MUIA_Window_ID, 'BIRDIEP',
WindowContents, VGroup,
Child, HGroup,
Child, VGroup,
Child, RectangleObject,End,
Child, mVGroup,
MUIA_Frame,MUIV_Frame_Group,
MUIA_FrameTitle,cat.msglLightBal.getstr(),
MUIA_ShortHelp, cat.msghLightBal.getstr(),
Child, adr_lra:=mSliderObject(60),MUIA_Slider_Max,255,MUIA_Slider_Min,-255,
MUIA_FrameTitle, cat.msglRed.getstr(),
End,
Child, adr_lga:=mSliderObject(60),MUIA_Slider_Max,255,MUIA_Slider_Min,-255,
MUIA_FrameTitle, cat.msglGreen.getstr(),
End,
Child, adr_lba:=mSliderObject(60),MUIA_Slider_Max,255,MUIA_Slider_Min,-255,
MUIA_FrameTitle, cat.msglBlue.getstr(),
End,
End,
Child, RectangleObject,End,
Child, mVGroup,
MUIA_Frame,MUIV_Frame_Group,
MUIA_FrameTitle,cat.msglOptions.getstr(),
Child,mHGroup,
MUIA_ShortHelp,cat.msghNoBmp.getstr(),
Child, adr_nobmp:=mCheckMark(FALSE),
Child, Label(cat.msglNoBmp.getstr()),
Child, RectangleObject, End,
End,
Child, mHGroup,
MUIA_ShortHelp,cat.msghNoIborder.getstr(),
Child, adr_noborder:=mCheckMark(FALSE),
Child, Label(cat.msglNoIborder.getstr()),
Child, RectangleObject, End,
End,
Child, mHGroup,
MUIA_ShortHelp,cat.msghFloodMask.getstr(),
Child, adr_flood:=mCheckMark(FALSE),
Child, Label(cat.msglFloodMask.getstr()),
Child, RectangleObject, End,
End,
Child, mHGroup,
MUIA_ShortHelp,cat.msghNoLight.getstr(),
Child, adr_nolight:=mCheckMark(FALSE),
Child, Label(cat.msglNoLight.getstr()),
Child, RectangleObject, End,
End,
Child, mHGroup,
MUIA_ShortHelp,cat.msghPubScr.getstr(),
Child, adr_pubscreens:=mCheckMark(FALSE),
Child, Label(cat.msglPubScr.getstr()),
Child, RectangleObject, End,
End,
Child, HGroup,
Child,RectangleObject,End,
Child, Label(cat.msglExclude.getstr()),
Child, RectangleObject,End,
End,
Child, mHGroup,
MUIA_ShortHelp,cat.msghExclude.getstr(),
Child, adr_doexcl:=mCheckMark(FALSE),
Child,adr_exclude:=mStringObject,
StringFrame,
MUIA_String_Format,MUIV_String_Format_Left,
End,
End,
Child, adr_precision:=pSliderObject,MUIA_Slider_Max,31,MUIA_Slider_Min,-1,
MUIA_Slider_Level,-1,
MUIA_ShortHelp,cat.msghPrecision.getstr(),
MUIA_FrameTitle, cat.msglPrecision.getstr(),
End,
End,
Child, RectangleObject,End,
End,
Child, VGroup,
MUIA_Frame,MUIV_Frame_Group,
MUIA_FrameTitle,cat.msglPlist.getstr(),
Child,adr_lv:=ListviewObject,
MUIA_ShortHelp,cat.msghPlist.getstr(),
MUIA_Listview_Input, MUI_TRUE,
MUIA_Listview_List, adr_l:=ListObject,
InputListFrame,
End,
End,
Child, PopaslObject,
MUIA_ShortHelp,cat.msghPname.getstr(),
MUIA_Popstring_Button,PopButton(MUII_PopFile),
MUIA_Popasl_Type,ASL_FILEREQUEST,
MUIA_Popstring_String,
adr_current:=StringObject,
StringFrame,
MUIA_String_Format,MUIV_String_Format_Left,
End,
End,
Child, HGroup,
Child, adr_addp:=TextObject,
MUIA_Background,MUII_ButtonBack,
MUIA_Frame,MUIV_Frame_Button,
MUIA_InputMode,MUIV_InputMode_RelVerify,
MUIA_Text_PreParse,'\ec',
MUIA_Text_Contents,cat.msglAdd.getstr(),
MUIA_ShortHelp,cat.msghAdd.getstr(),
End,
Child, adr_delp:=TextObject,
MUIA_Background,MUII_ButtonBack,
MUIA_Frame,MUIV_Frame_Button,
MUIA_InputMode,MUIV_InputMode_RelVerify,
MUIA_Text_PreParse,'\ec',
MUIA_Text_Contents,cat.msglDel.getstr(),
MUIA_ShortHelp,cat.msghDel.getstr(),
End,
Child, adr_view:= TextObject,
MUIA_Background,MUII_ButtonBack,
MUIA_Frame,MUIV_Frame_Button,
MUIA_InputMode,MUIV_InputMode_RelVerify,
MUIA_Text_PreParse,'\ec',
MUIA_Text_Contents,cat.msglView.getstr(),
MUIA_ShortHelp,cat.msghView.getstr(),
End,
End,
End,
Child, VGroup,
Child, RectangleObject, MUIA_Weight,10,End,
Child, mVGroup,
MUIA_Frame,MUIV_Frame_Group,
MUIA_FrameTitle, cat.msglDarkBal.getstr(),
MUIA_ShortHelp, cat.msghDarkBal.getstr(),
Child, adr_dra:=mSliderObject(-60),MUIA_Slider_Max,255,MUIA_Slider_Min,-255,
MUIA_FrameTitle, cat.msglRed.getstr(),
End,
Child, adr_dga:=mSliderObject(-60),MUIA_Slider_Max,255,MUIA_Slider_Min,-255,
MUIA_FrameTitle, cat.msglGreen.getstr(),
End,
Child, adr_dba:=mSliderObject(-60),MUIA_Slider_Max,255,MUIA_Slider_Min,-255,
MUIA_FrameTitle, cat.msglBlue.getstr(),
End,
End,
Child, RectangleObject,MUIA_Weight,10,End,
Child, VGroup,
MUIA_Frame,MUIV_Frame_Group,
MUIA_FrameTitle,cat.msglActive.getstr(),
Child,HGroup,
MUIA_ShortHelp,cat.msghAct.getstr(),
Child, adr_active:=mCheckMark(MUI_TRUE),
Child, Label(cat.msglAct.getstr()),
Child, RectangleObject, End,
End,
Child,adr_activec:=RegisterGroup(active_cc),
Child,VGroup,
Child, adr_colour:=ColoradjustObject,End,
Child,adr_activelvl:=mSliderObject(50),
MUIA_Slider_Min,0,
MUIA_Slider_Max,100,
MUIA_FrameTitle,cat.msglImposeLvl.getstr(),
End,
End,
Child, VGroup,
Child,adr_activepasl:=PopaslObject,
MUIA_ShortHelp,cat.msghSfile.getstr(),
MUIA_Popstring_Button,PopButton(MUII_PopFile),
MUIA_Popasl_Type,ASL_FILEREQUEST,
MUIA_Popstring_String,
adr_activen:=StringObject,
StringFrame,
MUIA_String_Format,MUIV_String_Format_Left,
End,
End,
Child, adr_viewact:= TextObject,
MUIA_Background,MUII_ButtonBack,
MUIA_Frame,MUIV_Frame_Button,
MUIA_InputMode,MUIV_InputMode_RelVerify,
MUIA_Text_PreParse,'\ec',
MUIA_Text_Contents,cat.msglView.getstr(),
MUIA_ShortHelp,cat.msghView.getstr(),
MUIA_Weight,5,
End,
End,
End,
End,
Child, RectangleObject, MUIA_Weight,10,End,
End,
End,
Child, HGroup,
Child, adr_save:=SimpleButton(cat.msglSave.getstr()),
Child, RectangleObject, End,
Child, adr_use:=SimpleButton(cat.msglUse.getstr()),
Child, RectangleObject, End,
Child, adr_test:=SimpleButton(cat.msglTest.getstr()),
Child, RectangleObject, End,
Child, adr_cancel:=SimpleButton(cat.msglCancel.getstr()),
End,
Child, HGroup,
Child,adr_stat:=TextObject,
MUIA_Frame,MUIV_Frame_Text,
MUIA_Background,MUII_TextBack,
MUIA_Text_PreParse,'\ec',
MUIA_Text_Contents,cat.msgiInitializing.getstr(),
End,
/* Child,adr_busy:=BusyObject, -> This is yet a project, to put a "busy" gadget.
MUIA_Weight,30, -> It does not yet work, it is why I commented it out.
End,*/
End,
End,
End,
End
IF app = NIL THEN
Raise(cat.msgfNoApp.getstr())
doMethodA(adr_cancel, [MUIM_Notify,MUIA_Pressed, FALSE, window,3,MUIM_Set,MUIA_Window_CloseRequest,MUI_TRUE])
doMethodA(window, [MUIM_Notify,MUIA_Window_CloseRequest,MUI_TRUE, app, 2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit])
doMethodA(adr_viewact,[MUIM_Notify,MUIA_Pressed, FALSE, app, 2,MUIM_Application_ReturnID,ID_VIEWACT])
doMethodA(adr_addp, [MUIM_Notify,MUIA_Pressed, FALSE, app, 3,MUIM_Application_ReturnID,ID_ADDP])
doMethodA(adr_delp, [MUIM_Notify,MUIA_Pressed, FALSE, app, 3,MUIM_Application_ReturnID,ID_DELP])
doMethodA(adr_view, [MUIM_Notify,MUIA_Pressed, FALSE, app, 2,MUIM_Application_ReturnID,ID_VIEW])
doMethodA(adr_use, [MUIM_Notify,MUIA_Pressed, FALSE, app, 2,MUIM_Application_ReturnID,ID_USE])
doMethodA(adr_test, [MUIM_Notify,MUIA_Pressed, FALSE, app, 2,MUIM_Application_ReturnID,ID_TEST])
doMethodA(adr_save, [MUIM_Notify,MUIA_Pressed, FALSE, app, 2,MUIM_Application_ReturnID,ID_SAVE])
doMethodA(adr_l, [MUIM_Notify,MUIA_List_Active, MUIV_EveryTime,app, 2,MUIM_Application_ReturnID,ID_REFRS])
doMethodA(adr_current,[MUIM_Notify,MUIA_String_Contents, MUIV_EveryTime,app, 2,MUIM_Application_ReturnID,ID_REFRL])
doMethodA(app, [MUIM_Notify,MUIA_Application_DoubleStart,MUI_TRUE, app, 2,MUIM_Application_ReturnID,ID_DOUBLE])
set(adr_current,MUIA_String_AttachedList,adr_lv)
set(window,MUIA_Window_Open,MUI_TRUE)
set(adr_stat,MUIA_Text_Contents,cat.msgiLoad.getstr())
/*LOAD BIRDIE PREFS*/
thandler:=Open('env:birdie.prefs',OLDFILE)
IF thandler = NIL
Mui_RequestA(app,window,0,NIL,cat.msgrOk.getstr(),cat.msgrNoBprefs.getstr(),NIL)
ELSE
startStat:=ReadStr(thandler,cmd)
Close(thandler)
parse(TRUE)
ENDIF
set(adr_stat,MUIA_Text_Contents,cat.msgiReady.getstr())
/* set(adr_busy,MUIA_Busy_Speed, MUIV_Busy_Speed_Off)*/
set(window,MUIA_Application_Sleep,FALSE)
running:=TRUE
WHILE running
result:= doMethodA(app, [MUIM_Application_Input,{sigs} ])
SELECT result
CASE MUIV_Application_ReturnID_Quit
IF tested
/* set(adr_busy,MUIA_Busy_Speed, MUIV_Busy_Speed_User)*/
breakbirdie()
waitquit()
Execute('Run >NIL: Birdie ? <Env:Birdie.Prefs',NIL,NIL)
/* set(adr_busy,MUIA_Busy_Speed, MUIV_Busy_Speed_Off)*/
ENDIF
set(window,MUIA_Window_CloseRequest,MUI_TRUE)
running:=FALSE
CASE ID_DOUBLE
set(app,MUIA_Application_Iconified,FALSE)
set(window,MUIA_Window_Activate,MUI_TRUE)
CASE ID_ABOUT
Mui_RequestA(app, window, 0, NIL, cat.msgrOk.getstr(), '%s\n%s',[PROGVER,cat.msgrAbout.getstr(),NIL])
CASE ID_PREFS
doMethodA(app, [MUIM_Application_OpenConfigWindow,NIL]) /*Do we really need to use a returnID*/
CASE ID_MABOUT /*when using menus? It would be better*/
doMethodA(app, [MUIM_Application_AboutMUI,window]) /*to directely call the methods..*/
CASE ID_HIDE
set(app,MUIA_Application_Iconified,MUI_TRUE)
CASE ID_VIEW
get(adr_current,MUIA_String_Contents,{s})
StringF(cmd,'run >NIL: multiview "\s"',s)
Execute(cmd,NIL,NIL)
CASE ID_ADDP
patternlist[patternlen++]:=String(80)
patternlist[patternlen]:=NIL
doMethodA(adr_l,[MUIM_List_InsertSingle,patternlist[patternlen-1],MUIV_List_Insert_Bottom])
set(adr_l,MUIA_List_Active,patternlen-1)
CASE ID_DELP
doMethodA(adr_l,[MUIM_List_GetEntry,MUIV_List_GetEntry_Active,{s}])
doMethodA(adr_l,[MUIM_List_Remove,MUIV_List_Remove_Active])
DisposeLink(s)
patternlen--
CASE ID_REFRS
doMethodA(adr_l,[MUIM_List_GetEntry,MUIV_List_GetEntry_Active,{s}])
set(adr_current,MUIA_String_Contents,s)
CASE ID_REFRL
get(adr_current,MUIA_String_Contents,{s})
get(adr_l,MUIA_List_Active,{n})
StrCopy(patternlist[n],s)
doMethodA(adr_l,[MUIM_List_Redraw,n])
CASE ID_VIEWACT
get(adr_activen,MUIA_String_Contents,{s})
StringF(cmd,'run >NIL: multiview "\s"',s)
Execute(cmd,NIL,NIL)
CASE ID_VALRES
resetvalues()
patternlist[]:=String(80)
patternlist[1]:=NIL
patternlen:=1
doMethodA(adr_l,[MUIM_List_InsertSingle,patternlist[],MUIV_List_Insert_Bottom])
set(adr_l,MUIA_List_Active,0)
CASE ID_VALINI
resetvalues()
thandler:=Open('env:Birdie.Prefs',OLDFILE)
IF thandler<> NIL
startStat:=ReadStr(thandler,cmd)
Close(thandler)
parse()
ENDIF
CASE ID_VALLST
resetvalues()
thandler:=Open('envarc:Birdie.Prefs',OLDFILE)
IF thandler<> NIL
startStat:=ReadStr(thandler,cmd)
Close(thandler)
parse()
ENDIF
CASE ID_TEST
tested:=TRUE
use(FL_NONE)
/* set(adr_busy,MUIA_Busy_Speed,MUIV_Busy_Speed_Off)*/
set(adr_stat,MUIA_Text_Contents,cat.msgiReady.getstr())
set(app,MUIA_Application_Sleep,FALSE)
CASE ID_USE
use(FL_EXIT)
tested:=FALSE
CASE ID_SAVE
use(FL_EXIT OR FL_SAVE)
tested:=FALSE
ENDSELECT
IF sigs THEN Wait(sigs)
ENDWHILE
EXCEPT DO
IF muimasterbase
IF exception THEN Mui_RequestA(app,window,0,cat.msgfMain.getstr(),0,exception,0)
IF exception THEN WriteF('\s\n\s',cat.msgfMain.getstr(),exception)
ELSE
IF exception THEN WriteF('\s\n\s',cat.msgfMain.getstr(),exception)
ENDIF
IF app THEN Mui_DisposeObject(app)
IF gmenuobj THEN Mui_DisposeObject(gmenuobj)
IF vmenuobj THEN Mui_DisposeObject(vmenuobj)
IF cl_mgroup THEN Mui_DeleteCustomClass(cl_mgroup)
IF cl_mslider THEN Mui_DeleteCustomClass(cl_mslider)
IF cl_mimage THEN Mui_DeleteCustomClass(cl_mimage)
IF cl_pslider THEN Mui_DeleteCustomClass(cl_pslider)
IF muimasterbase THEN CloseLibrary(muimasterbase)
cat.close()
IF localebase THEN CloseLibrary(localebase)
ENDPROC
PROC breakbirdie()
DEF exec:PTR TO execbase
exec:=execbase
task:=0
Disable()
searchIn(exec.taskwait)
searchIn(exec.taskready)
Enable()
IF task
Signal(task,SIGBREAKF_CTRL_C)
ELSE
Mui_RequestA(app,window,0,cat.msgrMain.getstr(),0,cat.msgrNoProc.getstr(),0)
ENDIF
ENDPROC
PROC waitquit()
DEF exec:PTR TO execbase
exec:=execbase
set(adr_stat,MUIA_Text_Contents,cat.msgiWaiting.getstr())
REPEAT
Delay(10)
task:=0
Disable()
searchIn(exec.taskwait)
searchIn(exec.taskready)
Enable()
IF CtrlC() THEN Raise('Aborted while waiting for Birdie to exit..')
UNTIL task=0
ENDPROC
PROC searchIn(from:PTR TO lh) HANDLE
DEF name,len,cli:PTR TO commandlineinterface,exectask:PTR TO tc,k[6]:STRING
exectask:=from.head
WHILE exectask.ln.succ
IF exectask.ln.type=NT_PROCESS AND (cli:=BADDR(exectask::process.cli))
name:=BADDR(cli.commandname)
len:=name[];name++
IF len
StrCopy(k,name+len-6)
IF StrCmp(LowerStr(k),'birdie',6)
task:=exectask
ENDIF
ENDIF
ENDIF
exectask:=exectask.ln.succ
ENDWHILE
EXCEPT DO
ENDPROC
PROC use(flags)
DEF stop=FALSE,t:PTR TO CHAR
/* set(adr_busy,MUIA_Busy_Speed,MUIV_Busy_Speed_User)*/
breakbirdie()
writecmd()
waitquit()
IF flags AND FL_EXIT -> If we'll have to exit then store to env...
REPEAT
thandler:=Open('env:Birdie.Prefs',NEWFILE)
IF thandler
/* IF InStr(cmd,'NoXmas') = -1
StrAdd(cmd,' NoXmas')
ENDIF*/
set(adr_stat,MUIA_Text_Contents,cat.msgiSave.getstr())
tstdout:=SetStdOut(thandler)
WriteF('\s',cmd)
SetStdOut(tstdout)
Close(thandler)
stop:=TRUE
ELSEIF Mui_RequestA(app,window,0,cat.msgrNoSaveT.getstr(),cat.msgrNoSaveB.getstr(),cat.msgrNoSave.getstr(),0) = 2
stop:=TRUE
ENDIF
UNTIL stop
Execute('Run >NIL: Birdie ? <Env:Birdie.Prefs',NIL,NIL)
set(window,MUIA_Window_CloseRequest,MUI_TRUE)
ELSE
t:=String(StrLen(cmd)+20)
StringF(t,'Run >NIL: Birdie \s',cmd)
set(adr_stat,MUIA_Text_Contents,cat.msgiRun.getstr())
Execute(t,NIL,NIL)
DisposeLink(t)
ENDIF
IF flags AND FL_SAVE
Execute('Copy >NIL: env:Birdie.prefs envarc:',NIL,NIL)
ENDIF
ENDPROC
PROC parse(sini=FALSE) -> IF sini (set initial) is true, the object's MUIA_Cmenu_Initial will be set.
DEF trim:PTR TO CHAR,fn -> fn equals `filename'
patternlen:=-1
IF (InStr(LowerStr(cmd),'activepattern') <> -1) OR (StrCmp(MidStr(btmp,cmd,0,13),'activepattern'))
activep:=1
ELSE
activep:=0
ENDIF
trim:=TrimStr(cmd)
space:=-1 -> space is the position of the separator (and not the beginning of a word).
REPEAT
pos:=space+1 -> here we set pos to the beginning of the studied word.
IF trim[pos]=34 ->(«"»): if the argument begins with a "...
space:=InStr(trim,'"',pos+1)+1 -> get the next " and add one. (to be on the separator following)
IF space=-1 -> no closing " found. We'll do like if there were one at the end..
MidStr(btmp,trim,pos+1)
ELSE
MidStr(btmp,trim,pos+1,space-pos-2)
IF trim[space]=0 THEN space:=-1 -> if space is on the end of the string, set it to -1. (This will cause the loop to abort)
ENDIF
fn:=TRUE -> filename
ELSE
fn:=FALSE
space:=InStr(trim,' ',pos+1) /*pos->space = current word*/
IF space=-1
MidStr(btmp,trim,pos)
ELSE
MidStr(btmp,trim,pos,space-pos)
ENDIF
IF EstrLen(btmp)>0
IF StrCmp(btmp,'lra')
pos:=space+1;space:=InStr(trim,' ',pos)
MidStr(tmp,trim,pos,space-pos)
set(adr_lra,MUIA_Slider_Level,Val(tmp))
IF sini THEN set(adr_lra,MUIA_Cmenu_Initial,Val(tmp))
ELSEIF StrCmp(btmp,'lga')
pos:=space+1;space:=InStr(trim,' ',pos)
MidStr(tmp,trim,pos,space-pos)
set(adr_lga,MUIA_Slider_Level,Val(tmp))
IF sini THEN set(adr_lga,MUIA_Cmenu_Initial,Val(tmp))
ELSEIF StrCmp(btmp,'lba')
pos:=space+1;space:=InStr(trim,' ',pos)
MidStr(tmp,trim,pos,space-pos)
set(adr_lba,MUIA_Slider_Level,Val(tmp))
IF sini THEN set(adr_lba,MUIA_Cmenu_Initial,Val(tmp))
ELSEIF StrCmp(btmp,'dra')
pos:=space+1;space:=InStr(trim,' ',pos)
MidStr(tmp,trim,pos,space-pos)
set(adr_dra,MUIA_Slider_Level,Val(tmp))
IF sini THEN set(adr_dra,MUIA_Cmenu_Initial,Val(tmp))
ELSEIF StrCmp(btmp,'dga')
pos:=space+1;space:=InStr(trim,' ',pos)
MidStr(tmp,trim,pos,space-pos)
set(adr_dga,MUIA_Slider_Level,Val(tmp))
IF sini THEN set(adr_dga,MUIA_Cmenu_Initial,Val(tmp))
ELSEIF StrCmp(btmp,'dba')
pos:=space+1;space:=InStr(trim,' ',pos)
MidStr(tmp,trim,pos,space-pos)
set(adr_dba,MUIA_Slider_Level,Val(tmp))
IF sini THEN set(adr_dba,MUIA_Cmenu_Initial,Val(tmp))
ELSEIF StrCmp(btmp,'nobitmaps')
set(adr_nobmp,MUIA_Selected,MUI_TRUE)
IF sini THEN set(adr_nobmp,MUIA_Cmenu_Initial,MUI_TRUE)
ELSEIF StrCmp(btmp,'noiconborder')
set(adr_noborder,MUIA_Selected,MUI_TRUE)
IF sini THEN set(adr_noborder,MUIA_Cmenu_Initial,MUI_TRUE)
ELSEIF StrCmp(btmp,'floodmaskmwb')
set(adr_flood,MUIA_Selected,MUI_TRUE)
IF sini THEN set(adr_flood,MUIA_Cmenu_Initial,MUI_TRUE)
ELSEIF StrCmp(btmp,'nolighting')
set(adr_nolight,MUIA_Selected,MUI_TRUE)
IF sini THEN set(adr_nolight,MUIA_Cmenu_Initial,MUI_TRUE)
ELSEIF StrCmp(btmp,'pubscreens')
set(adr_pubscreens,MUIA_Selected,MUI_TRUE)
IF sini THEN set(adr_pubscreens,MUIA_Cmenu_Initial,MUI_TRUE)
ELSEIF StrCmp(btmp,'exclude=',8)
MidStr(tmp,btmp,8)
set(adr_exclude,MUIA_String_Contents,tmp)
set(adr_doexcl,MUIA_Selected,MUI_TRUE)
IF sini
set(adr_exclude,MUIA_Cmenu_Initial,tmp)
set(adr_doexcl,MUIA_Cmenu_Initial,MUI_TRUE)
ENDIF
ELSEIF StrCmp(btmp,'precision=',10)
MidStr(tmp,btmp,10)
set(adr_precision,MUIA_Slider_Level,Val(tmp))
IF sini THEN set(adr_precision,MUIA_Cmenu_Initial,Val(tmp))
ELSEIF StrCmp(btmp,'imposelevel=',12)
MidStr(tmp,btmp,12)
set(adr_activelvl,MUIA_Slider_Level,Val(tmp))
IF sini THEN set(adr_activelvl,MUIA_Cmenu_Initial,Val(tmp))
ELSEIF StrCmp(btmp,'activecolor=',12)
MidStr(tmp,btmp,12,2)
StringF(s2,'$\s',tmp)
set(adr_colour,MUIA_Coloradjust_Red,Shl(Val(s2),24))
MidStr(tmp,btmp,14,2)
StringF(s2,'$\s',tmp)
set(adr_colour,MUIA_Coloradjust_Green,Shl(Val(s2),24))
MidStr(tmp,btmp,16,2)
StringF(s2,'$\s',tmp)
set(adr_colour,MUIA_Coloradjust_Blue,Shl(Val(s2),24))
set(adr_activec,MUIA_Group_ActivePage,0)
ELSEIF Not(StrCmp(btmp,'activepattern'))
fn:=TRUE -> not very nice but should work: if this couldn't be parsed, then assume it's a filename.
ENDIF
ENDIF
ENDIF
IF fn
IF activep=1
activep:=0
set(adr_activen,MUIA_String_Contents,btmp)
set(adr_activec,MUIA_Group_ActivePage,1)
ELSE
patternlen++
patternlist[patternlen]:=String(80)
StrCopy(patternlist[patternlen],btmp)
ENDIF
ENDIF
IF CtrlC()
space:=-1
ENDIF
UNTIL space = -1
patternlen++
patternlist[patternlen]:=NIL
set(adr_current,MUIA_String_Contents,patternlist[])
doMethodA(adr_l,[MUIM_List_Insert,patternlist,-1,MUIV_List_Insert_Bottom])
set(adr_l,MUIA_List_Active,MUIV_List_Active_Top)
ENDPROC TRUE
PROC writecmd()
StrCopy(cmd,'')
get(adr_lra,MUIA_Slider_Level,{n})
IF n <> 60
StringF(tmp,' lra \d',n)
StrAdd(cmd,tmp)
ENDIF
get(adr_lga,MUIA_Slider_Level,{n})
IF n <> 60
StringF(tmp,' lga \d',n)
StrAdd(cmd,tmp)
ENDIF
get(adr_lba,MUIA_Slider_Level,{n})
IF n <> 60
StringF(tmp,' lba \d',n)
StrAdd(cmd,tmp)
ENDIF
get(adr_dra,MUIA_Slider_Level,{n})
IF n <> -60
StringF(tmp,' dra \d',n)
StrAdd(cmd,tmp)
ENDIF
get(adr_dga,MUIA_Slider_Level,{n})
IF n <> -60
StringF(tmp,' dga \d',n)
StrAdd(cmd,tmp)
ENDIF
get(adr_dba,MUIA_Slider_Level,{n})
IF n <> -60
StringF(tmp,' dba \d',n)
StrAdd(cmd,tmp)
ENDIF
get(adr_nobmp,MUIA_Selected,{n})
IF n=MUI_TRUE THEN StrAdd(cmd,' Nobitmaps')
get(adr_noborder,MUIA_Selected,{n})
IF n=MUI_TRUE THEN StrAdd(cmd,' NoIconBorder')
get(adr_flood,MUIA_Selected,{n})
IF n=MUI_TRUE THEN StrAdd(cmd,' FloodMaskMwb')
get(adr_nolight,MUIA_Selected,{n})
IF n=MUI_TRUE THEN StrAdd(cmd,' NoLighting')
get(adr_pubscreens,MUIA_Selected,{n})
IF n=MUI_TRUE THEN StrAdd(cmd,' PubScreens')
get(adr_doexcl,MUIA_Selected,{n})
IF n = MUI_TRUE
get(adr_exclude,MUIA_String_Contents,{s})
StringF(tmp,' Exclude=\s',s)
StrAdd(cmd,tmp)
ENDIF
/* get(adr_noxmas,MUIA_Selected,{n})
IF n=MUI_TRUE THEN StrAdd(cmd,' NoXmas')
*/ get(adr_precision,MUIA_Slider_Level,{n})
IF n <> -1
StringF(tmp,' precision=\d',n)
StrAdd(cmd,tmp)
ENDIF
get(adr_active,MUIA_Selected,{n})
IF n = MUI_TRUE
get(adr_activec,MUIA_Group_ActivePage,{n})
IF n=1 -> Pattern
get(adr_activen,MUIA_String_Contents,{s})
StringF(tmp,' ActivePattern "\s"',s)
StrAdd(cmd,tmp)
ELSE -> Colour
get(adr_colour,MUIA_Coloradjust_Red,{red})
get(adr_colour,MUIA_Coloradjust_Green,{green})
get(adr_colour,MUIA_Coloradjust_Blue,{blue})
red:=Shr(red,24)
green:=Shr(green,24)
blue:=Shr(blue,24)
IF red < 0 THEN red:=256+red
IF green < 0 THEN green:=256+green
IF blue < 0 THEN blue:=256+blue
StringF(tmp,' ActiveColor=\z\h[2]\z\h[2]\z\h[2]',red,green,blue)
StrAdd(cmd,tmp)
get(adr_activelvl,MUIA_Slider_Level,{n})
IF n <> 50
StringF(tmp,' ImposeLevel=\d',n)
StrAdd(cmd,tmp)
ENDIF
ENDIF
ENDIF
FOR n:=0 TO patternlen-1
StringF(tmp,' "\s"',patternlist[n])
StrAdd(cmd,tmp)
ENDFOR
ENDPROC
PROC resetvalues()
set(adr_lra,MUIA_Slider_Level,60)
set(adr_lga,MUIA_Slider_Level,60)
set(adr_lba,MUIA_Slider_Level,60)
set(adr_dra,MUIA_Slider_Level,-60)
set(adr_dga,MUIA_Slider_Level,-60)
set(adr_dba,MUIA_Slider_Level,-60)
set(adr_nobmp,MUIA_Selected,FALSE)
set(adr_noborder,MUIA_Selected,FALSE)
set(adr_flood,MUIA_Selected,FALSE)
set(adr_nolight,MUIA_Selected,FALSE)
set(adr_pubscreens,MUIA_Selected,FALSE)
-> set(adr_noxmas,MUIA_Selected,FALSE)
set(adr_active,MUIA_Selected,MUI_TRUE)
set(adr_precision,MUIA_Slider_Level,-1)
set(adr_activec,MUIA_Group_ActivePage,1)
set(adr_activen,MUIA_String_Contents,'')
doMethodA(adr_l,[MUIM_List_Clear])
FOR n:=0 TO patternlen-1 DO DisposeLink(patternlist[n])
ENDPROC